Короутины - такие функции, которые могут возвращать управление другим функциям, сохраняя свое текущее состояние (стек вызовов и позицию выполнения). Когда они им можно дальше работать - они выполняются с того же места.

Объявить их можно так:
```python
async def main():
    print('hello')
    await asyncio.sleep(1)
    print('world')

>>> asyncio.run(main())
hello
world
>>> main()
<coroutine object main at 0x1053bb7c8>
```

[[Concurrency|Конкурентно]] вызываем несколько функций:
```python
async def say_after(delay, text):
	await asyncio.sleep(delay)
	print(text)

>>> await asyncio.gather(say_after(1, "hello"), say_after(2, "world"))
hello # через 1 сек
world # через 1 сек после hello
[None, None]
```

Помимо такого способа можно использовать [[Tasks|Task'и]].

---

https://docs.python.org/3/library/asyncio-task.html#coroutine
